﻿/*
 ***************************************************************************
 * Microsoft Visual C# .NET
 * 名称：       Shpm.System.Web.Control.CheckLong
 * 类型：       服务端输入校验类
 * 功能说明：   整形项目校验类
 * 作者：       王伟栋
 * 创建日期：   2007/07/10
 * 修改日期     修改者      修改内容
 * 
 * 
 * ---
 ***************************************************************************
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;

namespace Shpm.System.Web.Control
{
    public class CheckLong : ComAbsChecker
    {
        private int intLen = 0;
        /*
         *名称： CheckLong
         *功能： 构造函数
         *参数： 待校验值
         *返回： 无
         *说明： 无
        */
        public CheckLong(string value)
            : base(value)
        {
        }

        public CheckLong(string value, int intLen)
            : base(value)
        {
            this.intLen = intLen;
        }

        public CheckLong(String value, Shpm.System.Validator.ComAbsMsg msg)
            : base(value, msg)
        {           
        }

        public CheckLong(String value, int intLen, Shpm.System.Validator.ComAbsMsg msg)
            : base(value, msg)
        {
            this.intLen = intLen;
        }

        /*
         *名称： doCheck
         *功能： 校验函数
         *参数： 待校验值
         *返回： 无
         *说明： 无
        */
        protected override bool doCheck(string value)
        {
            if (value == null || string.Empty.Equals(value))
            {
                return true;
            }


            // 半角检查
            if (Encoding.UTF8.GetBytes(value).Length != value.Length)
            {
                return false;
            }


            try
            {
                // 数値解析
                long lvalue = long.Parse(value);

                // 桁数チェック
                if (intLen != 0)
                {
                    if (Convert.ToInt32(lvalue) < 0)
                    {
                        // 負数対応
                        intLen++;
                    }
                    if (intLen < Encoding.UTF8.GetBytes(value).Length)
                    {
                        return false;
                    }
                }

                return true;
            }
            catch
            {
                return false;
            }

            /*
            long ret;
            if (long.TryParse(value, out ret)==false || value.Equals(ret.ToString())==false )
            {
                return false;
            }

            return true;*/
        }
    }
}
